// 全排列

// 给定一个不含重复数字的数组 nums ，返回其 所有可能的全排列 。你可以 按任意顺序 返回答案。

// 示例 1：
// 输入：nums = [1,2,3]
// 输出：[[1,2,3],[1,3,2],[2,1,3],[2,3,1],[3,1,2],[3,2,1]]

// 示例 2：
// 输入：nums = [0,1]
// 输出：[[0,1],[1,0]]

// 示例 3：
// 输入：nums = [1]
// 输出：[[1]]

function permute(nums) {
  const res = [];
  // 回溯算法
  const backtrack = (path) => {
    // 路径长度等于 nums 长度，说明已经全排列完成
    if (path.length === nums.length) {
      res.push([...path]);
      return;
    }
    // 遍历 nums 中的每个数字
    // 如果数字已经在路径中，跳过
    // 否则，将数字加入路径，继续回溯
    for (let i = 0; i < nums.length; i++) {
      if (path.includes(nums[i])) continue;
      backtrack([...path, nums[i]]);
    }
  };
  backtrack([]);

  return res;
}
